分布式版本管理系统
优点
- 能将代码库完整地复制到本地
- 运行速度快
- 临时作业的提交易于管理
- 分支、合并简单方便
- 可以不受地点的限制进行协作开发
缺点
- 系统中没有真正意义上的最新版本
- 没有真正意义上的版本号
- 工作流程的配置过于灵活,易于产生混乱
- 思维方式的习惯需要一定的时间
Git概念
- 配置文件(优先级依次降低)
- .git/config 为特定版本库的配置文件
- ~/.gitconfig 为当前用户的配置文件
--global - /etc/gitconfig 为当前系统的配置文件
--system
- 版本库
- 裸版本库,没有工作目录,没有检出分支,不能用于正常开发
- 开发版本库,最常用的
- 工作中使用的是本地版本库或者当前版本库,共享和交换文件的版本库为远程版本库
- 分支
- 远程追踪分支与版本库关联,追踪远程分支中的变化
refs/remotes - 本地追踪分支和远程追踪分支对应,用于收集本地开发和远程追踪分支的变更
- 远程追踪分支与版本库关联,追踪远程分支中的变化
- 文件分类
- tracked(已追踪的)
- ignored(被忽略的)
- untracked(未追踪的)
- 对象类型(commit可以打tag,commit包含tree,tree包含至少一个blob)
- blob
- tree
- commit
- tag
- 索引(index)
- 提交(commit)
- 相对提交
- 除了跟提交外,其他每一个提交都有至少一个父提交
- 使用
^x来选择第x个父提交(多个父提交来源于merge),单独的^表示父级提交 - 使用
~来选择上一代提交,~n表示向上n代提交,单独的~表示父级提交 - 使用
@来表示,相对的版本,比如HEAD@{10}
- 提交范围
..表示一个范围,start..end表示start可达的但end不可达的内容(结合差),start和end分别为能表示提交的标识,比如commitid或者 相对提交等,范围的结果是前开后闭的区间,不包括start但包括end;也可以省略start或者end,省略的一方默认HEAD...同样表示一个范围,start...end表示start和end不同时可达的内容
- 相对提交
- 引用(reference)
.git/refs/- 本地分支名
.git/refs/heads/ - 远程跟踪分支名
.git/refs/remotes - 标签名
.git/refs/tags - HEAD 当前分支的最新提交
- ORIG_HEAD 类似
merge、reset这样的操作留下的操作前HEAD的保存 - FETCH_HEAD
fetch操作是获取的所有分支HEAD的列表 - MERGE_HEAD
merge操作时要写到HEAD里面的内容 - MERGE_MSG 记录合并失败的信息
- MEGE_MODE 合并标识状态
- 本地分支名
Git 操作
- 获得帮助
- 输入
git并回车,看到git相关帮助和提示 - 输入
git help xxx来查看子命令相关的帮助
- 输入
- 初始化仓库
git init- 会在当前目录下创建一个
.git的目录,包含了相关的版本库相关的信息
- 会在当前目录下创建一个
- 版本库克隆
git clone- clone过程原始版本库中的
refs/heads下的本地分支,会成为新的克隆版本库refs/remotes下的远程跟踪分支,原始版本库中的refs/remotes下的远程分支不会克隆 refs/tags会被克隆,hooks、配置文件、reflog、stash 不会被克隆
- clone过程原始版本库中的
- 添加跟踪
git add - 删除跟踪
git rm - 带跟踪的移动或者改名
git mv - 切换分支、拉取文件
git checkoutgit checkout branch -- path/to/file拉取branch中的文件
- 日志查看
git log - 比较差异
git diff - 单行最后一次变更查看
git blame - 提交内容
git commitgit commit --amend修改最后一次提交
- 二分查找
git bisect - 分支管理
git branch - 更详细的分支信息
git show-branch- 展示的是二位矩阵,破折号上面表示分支的信息,破折号下面表示提交的信息
+表示当前行的提交存在于当前列的分支中*表示存在于活动分支中的提交-表示当前提交为一个合并提交
- 分支合并
git merge- 冲突文件状态
git status --merge或者git ls-files -u
- 冲突文件状态
- 重置状态
git reset--soft,index和working copy保持不变,只改变HEAD--mixedworking copy保持不变,HEAD和index改变--hardworking copy,index,HEAD都会改变
- 引入提交的变更
git cherry-pickgit cherry-pick commitid在当前分支引入commitid的变更git cherry-pick start..end新版的git中,支持引入一个范围的变更
- 以新的提交抵消特定提交
git revertgit rebase branch让当前分支基于最新的 branchgit rebase base target使target分支基于base分支的最新提交
- 临时保持状态
git stash - 引用日志
git reflog - 获取引用信息
git rev-parse - 远程版本信息管理
git remote - 抓取远程信息
git fetch - 抓取远程信息并合并
git pull - 推送本地信息到远程
git push - 修改版本库信息
git filter-branch git rev-parsegit rev-list
参考资料
最后更新: 2022年03月02日 03:32
原始链接: http://rawbin-.github.io/dev-tools/git/2017-11-10-git-concept/